Команде учебной поддержки нужен список активных зачислений, успеваемость которых снизилась в последнее время. Сравните каждого студента с его собственной предыдущей успеваемостью по тому же курсу.
Согласуйте правила
- Используйте два периода:
earlierиrecent. В каждом по две равнозначные работы. - Требуйте не менее двух не-NULL оценок в каждом периоде перед сравнением средних.
- Вычислите
decline_points = earlier_avg - recent_avg. - Снижение на 15 баллов и более означает Review. В остальных случаях подходящее зачисление получает No alert.
- Оставляйте Insufficient data отдельно. Ноль — это допустимая оценка; NULL или отсутствующая запись — не ноль.
Подготовьте базу данных
Откройте прилагаемый файл lab8_setup.sql из папки ассистента DSAI2202/lab8/ в pgAdmin и выполните файл целиком. При каждом новом подключении снова используйте настройки подключения справа.
В ходе настройки также создаётся performance_comparison— сохранённый запрос, называемый представлением. Он пригодится в последующих упражнениях; это не дополнительная таблица с сохранёнными результатами оценивания.
SET search_path TO lab8;SET search_path TO lab8;
SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;SET search_path TO lab8;
SELECT e.enrolment_id, e.student_id, e.course_code,
r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;Проверьте количество строк в настройке
| Таблица | Строки | Что представляет одна строка |
|---|---|---|
| students | 18 | Профиль студента |
| courses | 4 | Курс |
| enrolments | 24 | Зачисление одного студента на один курс |
| assessment_results | 92 | Один результат оценивания для зачисления и периода |
| support_units | 7 | Подразделение поддержки в дополнительном упражнении по иерархии |
Имеется 22 активных и 2 отменённых зачисления. Итоговое исследование требует одну строку на каждое активное зачисление, а не одну строку на каждую работу или одну строку на студента по всем курсам.
Пять случаев для разбора
| Зачисление | Курс | Работы за earlier | Работы за recent | Достаточно данных? |
|---|---|---|---|---|
| E01 | SQL101 | 80, 90 | 60, 70 | Да |
| E07 | SQL101 | 80, NULL | 50, 50 | Нет: только одна оценка за earlier |
| E08 | SQL101 | 80, 80 | NULL, NULL | Нет: нет оценённых работ за recent |
| E09 | SQL101 | Нет строк | 60, 60 | Нет: отсутствует период earlier |
| E24 | STAT101 | 0, 0 | 0, 0 | Да |
Запрос проверки возвращает 18 строк с работами. У E09 всего две строки; работы за earlier отсутствуют. У E08 две строки за recent, но ни в одной нет записанной оценки.
Проверьте два подходящих примера
E01: средняя за earlier 85, средняя за recent 65, снижение на 20 баллов → Review. E24: обе средние равны 0, снижение 0 → No alert. Три других примера требуют пометки Insufficient data.